gtk-demo: Add 3fg touchpad swipe handling to gestures demo
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 2 Mar 2017 17:18:31 +0000 (18:18 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 2 Mar 2017 17:25:04 +0000 (18:25 +0100)
We can handle those on wayland, so we should show it's possible.

demos/gtk-demo/gestures.c

index 8ef19b077ec9e5c749d2f245ccbc1da3c08481b1..1e49756050155c72cfe5c3604ad562b129e94a4d 100644 (file)
@@ -13,6 +13,17 @@ static gdouble swipe_x = 0;
 static gdouble swipe_y = 0;
 static gboolean long_pressed = FALSE;
 
+static gboolean
+touchpad_swipe_gesture_begin (GtkGesture       *gesture,
+                              GdkEventSequence *sequence,
+                              GtkWidget        *widget)
+{
+  /* Disallow touchscreen events here */
+  if (sequence != NULL)
+    gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_DENIED);
+  return sequence == NULL;
+}
+
 static void
 swipe_gesture_swept (GtkGestureSwipe *gesture,
                      gdouble          velocity_x,
@@ -156,6 +167,19 @@ do_gestures (GtkWidget *do_widget)
                                                   GTK_PHASE_BUBBLE);
       g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture);
 
+      /* 3fg swipe for touchpads */
+      gesture = g_object_new (GTK_TYPE_GESTURE_SWIPE,
+                              "widget", drawing_area,
+                              "n-points", 3,
+                              NULL);
+      g_signal_connect (gesture, "begin",
+                        G_CALLBACK (touchpad_swipe_gesture_begin), drawing_area);
+      g_signal_connect (gesture, "swipe",
+                        G_CALLBACK (swipe_gesture_swept), drawing_area);
+      gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
+                                                  GTK_PHASE_BUBBLE);
+      g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture);
+
       /* Long press */
       gesture = gtk_gesture_long_press_new (drawing_area);
       g_signal_connect (gesture, "pressed",